イテレータ型(Python 組み込み型)
この概念(注:コンテナでの反復処理の概念)は 2 つの別々のメソッドを使って実装されています
これらのメソッドを使ってユーザ定義のクラスで反復を行えるようにできます。
container.__iter__()
(two distinct methodなのでiterator.__iter__()も含んでいるかも)
One method needs to be defined for container objects to provide iterable support:
「コンテナオブジェクトがイテラブルのサポートを提供するには、1つのメソッド(__iter__)が定義されている必要があります」
(理解:__iter__を実装したコンテナオブジェクトはイテラブル)
iterator オブジェクトを返します。
iteratorは__iter__と__next__の2つのメソッドをサポートするオブジェクト
この2つのメソッドで「イテレータプロトコル」
iterator.__next__()
iterator の次のアイテムを返します。
もしそれ以上アイテムが無ければ StopIteration 例外を送出します。
シーケンスは、必ず反復処理メソッドをサポートしています。
iterator.__iter__()
iterator オブジェクト自体を返します。
このメソッドはコンテナとイテレータの両方を for および in 文で使えるようにするために必要です。